package com.campus.activity.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.activity.entity.Registration;

import java.util.List;
import java.util.Map;

/**
 * 报名信息服务接口
 * 
 * @author System
 * @since 2024
 */
public interface RegistrationService extends IService<Registration> {

    /**
     * 学生报名活动
     * 
     * @param studentId 学生ID
     * @param activityId 活动ID
     * @return 是否成功
     */
    boolean registerActivity(Integer studentId, Integer activityId);

    /**
     * 取消报名
     * 
     * @param registrationId 报名ID
     * @return 是否成功
     */
    boolean cancelRegistration(Integer registrationId);

    /**
     * 取消学生对指定活动的报名
     * 
     * @param studentId 学生ID
     * @param activityId 活动ID
     * @return 是否成功
     */
    boolean cancelRegistrationByStudentAndActivity(Integer studentId, Integer activityId);

    /**
     * 更新报名状态
     * 
     * @param registrationId 报名ID
     * @param status 新状态
     * @return 是否成功
     */
    boolean updateRegistrationStatus(Integer registrationId, String status);

    /**
     * 获取学生的报名状态信息
     * 
     * @param studentId 学生ID
     * @return 报名记录列表
     */
    List<Registration> getRegistrationStatus(Integer studentId);

    /**
     * 根据活动ID查询报名记录
     * 
     * @param activityId 活动ID
     * @return 报名记录列表
     */
    List<Registration> getRegistrationsByActivityId(Integer activityId);

    /**
     * 获取活动报名统计信息
     * 
     * @param activityId 活动ID
     * @return 统计信息
     */
    Map<String, Object> getRegistrationStatistics(Integer activityId);

    /**
     * 查询符合条件的学生报名信息
     * 
     * @param activityId 活动ID
     * @param status 报名状态
     * @return 报名记录列表
     */
    List<Registration> queryRegistrationInfo(Integer activityId, String status);

    /**
     * 检查学生是否已报名某活动
     * 
     * @param studentId 学生ID
     * @param activityId 活动ID
     * @return 是否已报名
     */
    boolean isStudentRegistered(Integer studentId, Integer activityId);

    /**
     * 获取活动当前报名人数
     * 
     * @param activityId 活动ID
     * @return 报名人数
     */
    Integer getCurrentRegistrationCount(Integer activityId);

    /**
     * 获取活动已通过报名人数
     * 
     * @param activityId 活动ID
     * @return 已通过报名人数
     */
    Integer getApprovedRegistrationCount(Integer activityId);
}